package tacos.repository;

import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.CrudRepository;
import org.springframework.data.repository.PagingAndSortingRepository;
import tacos.domain.Order;
import tacos.domain.Taco;
import tacos.domain.User;

import java.util.Date;
import java.util.List;

public interface OrderRepository extends PagingAndSortingRepository<Order,Long> {
    /**
     * CrudRepository定义了很多用于CRUD操作的方法。
     * 他是参数化的：
     * 第一个参数repository表示要持久化的实体类型
     * 第二个参数是实体ID的属性
     */

    List<Order> findByDeliveryZip(String zip);

    /**
     * find get read 视为同义词，用来获取一个或多个实体
     * p78
     * @param zip
     * @param startDate
     * @param endDate
     * @return
     */
    List<Order> findByDeliveryZipAndPlacedAtBetween(String zip, Date startDate,Date endDate);

    // 忽略大小写
    List<Order> findByDeliveryZipAndDeliveryCityIgnoringCase(String zip,String city);

    // 排序
    List<Order> findByCcCVVOrderById(String cccVv);

    @Query("SELECT o FROM Order o WHERE o.deliveryCity ='Seattle'")
    List<Order> readOrdersInSeattle();

    List<Order> findByUserOrderByPlacedAtDesc(User user, Pageable pageable);
}
